#include "ModRunMemento.h"
#include <QDebug>

#include "../Output/FactoryOutput.h"

#include "Gof23/Gof_Adapter/MoveOld.h"
#include "Gof23/Gof_Adapter/MoveAdapter.h"

//备忘录模式的ModRun（Memento）;
ModRunMemento::ModRunMemento()
{
    //模式名称;
    m_strModelName = "备忘录模式（Memento）;";
    //模式描述;
    m_strModelDesc = "备忘录模式：在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。\n"
                     "这样以后就可以将该对象恢复到原来保存的状态。\n"
                     "\n"
                     ;
}

//初始化显示模式;
void ModRunMemento::InitDisplay()
{
    qDebug() << m_strModelName;
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateDescOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outList{ m_strModelName,m_strModelDesc};
        pOutPut->OutPut(outList);
    }
}

//返回模式类型;
EnumModRun ModRunMemento::GetEnum()
{
    return emModRunMemento;
}

//运行模式;
void ModRunMemento::ModRun()
{
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateRunOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outListStart{ "========备忘录模式（Memento） start:=======" };
        std::initializer_list<QString> outListEnd{ "========备忘录模式（Memento） end:=======" };
        pOutPut->OutPut(outListStart);

        //备忘录模式（Memento）;
        
        
        pOutPut->OutPut(outListEnd);
    }

}

InterFaceModRun* ModRunMemento::CreateMe()
{
    return new ModRunMemento();
}
